﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades.Espectaculos;
using Negocio.Espectaculos;

public partial class Espectaculos_Configuracion_frmRegistroTipoEspectaculo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            lblMensaje.Text = "Ingrese los datos del tipo.";

            if (!string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                //cargar editar
                int id = Convert.ToInt32(Request.QueryString["id"].ToString());

                lblMensaje.Text = "Está editando el registro nro. : " + id.ToString();
                if (!string.IsNullOrEmpty(Request.QueryString["ref"]))
                {
                    //cargar editar
                    string refer = Request.QueryString["ref"].ToString();
                    if (refer == "reg")
                    {
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se realizó correctamente.');", true);

                    }
                }


                cargarTipo(id);
            }
            else
            {
                //nuevo

                chkActivo.Checked = true;
            }
        }
    }

    private void cargarTipo(int id)
    {
        EspTipoEspectaculo obj = EspTipoEspectaculoBLL.ObtenerTipoEspectaculo(id);
        txtNombre.Text = obj.Tipo;
        hdIdTipo.Value = obj.IdTipo.ToString();
        chkActivo.Checked = (obj.Estado == 1 ? true : false);
        cargarSub();
    }

    protected void grvSubs_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            bool edicion = e.Row.RowIndex == grvSub.EditIndex ? true : false;

            Image imgEstado = (Image)e.Row.FindControl("ibtnEstado");
            ImageButton ibtnEditar = (ImageButton)e.Row.FindControl("ibtnEditar");
            HiddenField hdEstado = (HiddenField)e.Row.FindControl("hdEstado");

            string rutaActivo = "~/Espectaculos/Images/botones/activo.png";
            string rutaInactivo = "~/Espectaculos/Images/botones/inactivo.png";

            if (ibtnEditar != null)
                ibtnEditar.CommandArgument = e.Row.RowIndex.ToString();

            switch (hdEstado.Value)
            {
                case "1":
                    imgEstado.ImageUrl = rutaActivo;
                    imgEstado.ToolTip = "Activo";
                    break;
                case "0":
                    imgEstado.ToolTip = "Inactivo";
                    imgEstado.ImageUrl = rutaInactivo;
                    break;
            }

            if (edicion)
            {
                imgEstado.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
                ImageButton ibtnGrabar = (ImageButton)e.Row.FindControl("ibtnGrabar");
                ImageButton ibtnDeshacer = (ImageButton)e.Row.FindControl("ibtnDeshacer");
                if (ibtnGrabar != null)
                    ibtnGrabar.CommandArgument = e.Row.RowIndex.ToString();
                if (ibtnDeshacer != null)
                    ibtnDeshacer.CommandArgument = e.Row.RowIndex.ToString();

                imgEstado.Attributes.Add("OnClick", "javascript:cambiarEstado('" + imgEstado.ClientID + "','" + hdEstado.ClientID + "');");
            }
        }
    }

    protected void grvSubs_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int rowIndex = -1;
        int.TryParse(e.CommandArgument.ToString(), out rowIndex);
        int result = 0;
        switch (e.CommandName)
        {
            case "Grabar":

                result = Grabar(rowIndex);

                break;
            case "Deshacer":

                Deshacer(rowIndex);

                break;
            case "Editar":

                Editar(rowIndex);

                break;


        }

        if (result > 0)
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Información", "alert('La operación se completó con éxito.');", true);
    }

    private int Grabar(int index)
    {
        try
        {
            int Id = 0;
            int.TryParse(((Label)grvSub.Rows[index].FindControl("lblId")).Text, out Id);

            EspSubTipoEspectaculo obj = new EspSubTipoEspectaculo();
            obj.SubTipo = ((TextBox)grvSub.Rows[index].FindControl("txtDescripcion")).Text;
            obj.IdTipo = Convert.ToInt32(hdIdTipo.Value);
           
            int result = 0;

            if (hdIdTipo.Value == "0")
            {
                obj.Estado = Convert.ToInt32(((HiddenField)grvSub.Rows[index].FindControl("hdEstado")).Value);
                List<EspSubTipoEspectaculo> lista = (List<EspSubTipoEspectaculo>)ViewState["detalle"];
                lista[index] = obj;
                ViewState["detalle"] = lista;

                grvSub.EditIndex = -1;
                refrescarGrid();
            }
            else
            {
                if (Id == 0)//insertar
                {
                    obj.Estado = 1;
                    obj.IdSubTipo = 0;
                    result = EspTipoEspectaculoBLL.AgregarSubTipoEspectaculo(obj);

                }
                else //actualizar
                {
                    obj.IdSubTipo = Id;
                    obj.Estado = Convert.ToInt32(((HiddenField)grvSub.Rows[index].FindControl("hdEstado")).Value);
                    result = EspTipoEspectaculoBLL.ModificarSubTipoEspectaculo(obj);
                }
                cargarSub();
            }

            return result;

        }
        catch (Exception ex)
        {
            return 0;
        }
    }

    private void Deshacer(int index)
    {
        try
        {
            List<EspSubTipoEspectaculo> lista = new List<EspSubTipoEspectaculo>();
            if (hdIdTipo.Value != "0")
            {
                lista = ((List<EspSubTipoEspectaculo>)ViewState["detalle"]).FindAll(delegate(EspSubTipoEspectaculo det)
                {
                    return !det.IdSubTipo.ToString().Equals("0");
                });
            }
            //else
            //{
            //    lista = ((List<EspSubTipoEspectaculo>)ViewState["detalle"]).FindAll(delegate(EspSubTipoEspectaculo det)
            //    {
            //        return !det.SubTipo.Equals("");
            //    });
            //}
            
            ViewState["detalle"] = lista;
            grvSub.EditIndex = -1;
            refrescarGrid();


        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void Editar(int index)
    {
        try
        {
            grvSub.EditIndex = index;
            refrescarGrid();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void cargarSub()
    {
        try
        {
            
            ViewState["detalle"] = null;
            List<EspSubTipoEspectaculo> lista = new List<EspSubTipoEspectaculo>();
            int tipo = 0;
            int.TryParse(hdIdTipo.Value, out  tipo);
            lista = EspTipoEspectaculoBLL.ListarSubTipoEspectaculo(tipo, -1);

            ViewState["detalle"] = lista;
            grvSub.EditIndex = -1;
            grvSub.DataSource = ViewState["detalle"];
            grvSub.DataBind();
            grvSub.EmptyDataText = "No se encontraron registros.";
            
        }
        catch (Exception ex)
        {
            throw ex; 
        }

    }

    private void refrescarGrid()
    {
        grvSub.DataSource = ViewState["detalle"];
        grvSub.DataBind();
    }

    protected void imbAgregarSub_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            if (grvSub.EditIndex != 0)
            {
                List<EspSubTipoEspectaculo> lista = null;
                if (ViewState["detalle"] == null)
                {
                    lista = new List<EspSubTipoEspectaculo>();
                    ViewState["detalle"] = lista;
                }
                else
                {
                    lista = (List<EspSubTipoEspectaculo>)ViewState["detalle"];
                }
                EspSubTipoEspectaculo obj = new EspSubTipoEspectaculo();
                obj.Estado = 1;
                obj.IdTipo = int.Parse(hdIdTipo.Value);

                lista.Insert(0, obj);
                grvSub.DataSource = lista;
                grvSub.EditIndex = 0;
                grvSub.DataBind();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("frmTipoEspectaculo.aspx");
    }
    
    protected void btnGrabar_Click(object sender, EventArgs e)
    {
        try
        {
            EspTipoEspectaculo obj = new EspTipoEspectaculo();
            int id = 0;
            int.TryParse(hdIdTipo.Value, out id);

            obj.IdTipo = id;
            obj.Estado = chkActivo.Checked ? 1 : 0;
            obj.Tipo = txtNombre.Text;

            int result = 0;
            if (id == 0)
            {
                List<EspSubTipoEspectaculo> subs = (List<EspSubTipoEspectaculo>)ViewState["detalle"];
                if (subs == null)
                {
                    subs = new List<EspSubTipoEspectaculo>();
                }
                result = EspTipoEspectaculoBLL.AgregarTipoEspectaculo(obj, subs);
                if (result > 0)
                {
                    hdIdTipo.Value = result.ToString();
                    //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se realizó correctamente.');", true);
                    Response.Redirect("frmRegistroTipoEspectaculo.aspx?id=" + result.ToString() + "&ref=reg");
                }
                else if (result == -1)
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('El nombre del tipo ingresado ya existe.');", true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.');", true);

                }
            }
            else
            {
                result = EspTipoEspectaculoBLL.ModificarTipoEspectaculo(obj);

                if (result > 0)
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se realizó correctamente.');", true);
                   // Response.Redirect("frmRegistroArtista.aspx?id=" + id.ToString() + "&ref=reg");
                }
                else if (result == -1)
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('El nombre del tipo ingresado ya existe.');", true);
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.');", true);

                }
            }

            cargarSub();

        }
        catch (Exception ex)
        {
            throw ex;
        }



    }
}